home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / PowerLisp 2.01 / Supplemental Documentation / Documentation / Chapter 02. Data Types < prev    next >
Text File  |  1995-03-27  |  76KB  |  1,589 lines

  1. Common Lisp the Language, 2nd Edition
  2. -------------------------------------------------------------------------------
  3.  
  4. 2. Data Types
  5.  
  6. Common Lisp provides a variety of types of data objects. It is important to
  7. note that in Lisp it is data objects that are typed, not variables. Any
  8. variable can have any Lisp object as its value. (It is possible to make an
  9. explicit declaration that a variable will in fact take on one of only a limited
  10. set of values. However, such a declaration may always be omitted, and the
  11. program will still run correctly. Such a declaration merely constitutes advice
  12. from the user that may be useful in gaining efficiency. See declare.)
  13.  
  14. In Common Lisp, a data type is a (possibly infinite) set of Lisp objects. Many
  15. Lisp objects belong to more than one such set, and so it doesn't always make
  16. sense to ask what is the type of an object; instead, one usually asks only
  17. whether an object belongs to a given type. The predicate typep may be used to
  18. ask whether an object belongs to a given type, and the function type-of returns
  19. a type to which a given object belongs.
  20.  
  21. The data types defined in Common Lisp are arranged into a hierarchy (actually a
  22. partial order) defined by the subset relationship. Certain sets of objects,
  23. such as the set of numbers or the set of strings, are interesting enough to
  24. deserve labels. Symbols are used for most such labels (here, and throughout
  25. this book, the word ``symbol'' refers to atomic symbols, one kind of Lisp
  26. object, elsewhere known as literal atoms). See chapter 4 for a complete
  27. description of type specifiers.
  28.  
  29. The set of all objects is specified by the symbol t. The empty data type, which
  30. contains no objects, is denoted by nil.
  31.  
  32. [old_change_begin]
  33. A type called common encompasses all the data objects required by the Common
  34. Lisp language. A Common Lisp implementation is free to provide other data types
  35. that are not subtypes of common.
  36. [old_change_end]
  37.  
  38. [change_begin]
  39. X3J13 voted in March 1989 (COMMON-TYPE)   to remove the type common (and the
  40. predicate commonp) from the language, on the grounds that it has not proved to
  41. be useful in practice and that it could be difficult to redefine in the face of
  42. other changes to the Common Lisp type system (such as the introduction of CLOS
  43. classes).
  44. [change_end]
  45.  
  46. The following categories of Common Lisp objects are of particular interest:
  47. numbers, characters, symbols, lists, arrays, structures, and functions. There
  48. are others as well. Some of these categories have many subdivisions. There are
  49. also standard types defined to be the union of two or more of these categories.
  50. The categories listed above, while they are data types, are neither more nor
  51. less ``real'' than other data types; they simply constitute a particularly
  52. useful slice across the type hierarchy for expository purposes.
  53.  
  54. Here are brief descriptions of various Common Lisp data types. The remaining
  55. sections of this chapter go into more detail and also describe notations for
  56. objects of each type. Descriptions of Lisp functions that operate on data
  57. objects of each type appear in later chapters.
  58.  
  59.    *  Numbers are provided in various forms and representations. Common Lisp
  60.      provides a true integer data type: any integer, positive or negative, has
  61.      in principle a representation as a Common Lisp data object, subject only
  62.      to total memory limitations (rather than machine word width). A true
  63.      rational data type is provided: the quotient of two integers, if not an
  64.      integer, is a ratio. Floating-point numbers of various ranges and
  65.      precisions are also provided, as well as Cartesian complex numbers.
  66.  
  67.    *  Characters represent printed glyphs such as letters or text formatting
  68.      operations. Strings are one-dimensional arrays of characters. Common Lisp
  69.      provides for a rich character set, including ways to represent characters
  70.      of various type styles.
  71.  
  72.    *  Symbols (sometimes called atomic symbols for emphasis or clarity) are
  73.      named data objects. Lisp provides machinery for locating a symbol object,
  74.      given its name (in the form of a string). Symbols have property lists,
  75.      which in effect allow symbols to be treated as record structures with an
  76.      extensible set of named components, each of which may be any Lisp object.
  77.      Symbols also serve to name functions and variables within programs.
  78.  
  79.    *  Lists are sequences represented in the form of linked cells called
  80.      conses. There is a special object (the symbol nil) that is the empty list.
  81.      All other lists are built recursively by adding a new element to the front
  82.      of an existing list. This is done by creating a new cons, which is an
  83.      object having two components called the car and the cdr. The car may hold
  84.      anything, and the cdr is made to point to the previously existing list.
  85.      (Conses may actually be used completely generally as two-element record
  86.      structures, but their most important use is to represent lists.)
  87.  
  88.    *  Arrays are dimensioned collections of objects. An array can have any
  89.      non-negative number of dimensions and is indexed by a sequence of
  90.      integers. A general array can have any Lisp object as a component; other
  91.      types of arrays are specialized for efficiency and can hold only certain
  92.      types of Lisp objects. It is possible for two arrays, possibly with
  93.      differing dimension information, to share the same set of elements (such
  94.      that modifying one array modifies the other also) by causing one to be
  95.      displaced to the other. One-dimensional arrays of any kind are called
  96.      vectors. One-dimensional arrays of characters are called strings.
  97.      One-dimensional arrays of bits (that is, of integers whose values are 0 or
  98.      1) are called bit-vectors.
  99.  
  100.    *  Hash tables provide an efficient way of mapping any Lisp object (a key)
  101.      to an associated object.
  102.  
  103.    *  Readtables are used to control the built-in expression parser read.
  104.  
  105.    *  Packages are collections of symbols that serve as name spaces. The parser
  106.      recognizes symbols by looking up character sequences in the current
  107.      package.
  108.  
  109.    *  Pathnames represent names of files in a fairly implementation-independent
  110.      manner. They are used to interface to the external file system.
  111.  
  112.    *  Streams represent sources or sinks of data, typically characters or
  113.      bytes. They are used to perform I/O, as well as for internal purposes such
  114.      as parsing strings.
  115.  
  116.    *  Random-states are data structures used to encapsulate the state of the
  117.      built-in random-number generator.
  118.  
  119.    *  Structures are user-defined record structures, objects that have named
  120.      components. The defstruct facility is used to define new structure types.
  121.      Some Common Lisp implementations may choose to implement certain
  122.      system-supplied data types, such as bignums, readtables, streams, hash
  123.      tables, and pathnames, as structures, but this fact will be invisible to
  124.      the user.
  125.  
  126. [old_change_begin]
  127.  
  128.    * Functions are objects that can be invoked as procedures; these may take
  129.      arguments and return values. (All Lisp procedures can be construed to
  130.      return values and therefore every procedure is a function.) Such objects
  131.      include compiled-functions (compiled code objects). Some functions are
  132.      represented as a list whose car is a particular symbol such as lambda.
  133.      Symbols may also be used as functions.
  134.  
  135. [old_change_end]
  136.  
  137. [change_begin]
  138. X3J13 voted in June 1988 (FUNCTION-TYPE)   to specify that symbols are not of
  139. type function, but are automatically coerced to functions in certain situations
  140. (see section 2.13).
  141.  
  142. X3J13 voted in June 1988 (CONDITION-SYSTEM)   to adopt the Common Lisp
  143. Condition System, thereby introducing a new category of data objects:
  144.  
  145.    *  Conditions are objects used to affect control flow in certain
  146.      conventional ways by means of signals and handlers that intercept those
  147.      signals. In particular, errors are signaled by raising particular
  148.      conditions, and errors may be trapped by establishing handlers for those
  149.      conditions.
  150.  
  151. X3J13 voted in June 1988 (CLOS)   to adopt the Common Lisp Object System,
  152. thereby introducing additional categories of data objects:
  153.  
  154.    *  Classes determine the structure and behavior of other objects, their
  155.      instances. Every Common Lisp data object belongs to some class. (In some
  156.      ways the CLOS class system is a generalization of the system of type
  157.      specifiers of the first edition of this book, but the class system
  158.      augments the type system rather than supplanting it.)
  159.  
  160.    *  Methods are chunks of code that operate on arguments satisfying a
  161.      particular pattern of classes. Methods are not functions; they are not
  162.      invoked directly on arguments but instead are bundled into generic
  163.      functions.
  164.  
  165.    *  Generic functions are functions that contain, among other information, a
  166.      set of methods. When invoked, a generic function executes a subset of its
  167.      methods. The subset chosen for execution depends in a specific way on the
  168.      classes or identities of the arguments to which it is applied.
  169.  
  170. [change_end]
  171.  
  172. These categories are not always mutually exclusive. The required relationships
  173. among the various data types are explained in more detail in section 2.15.
  174.  
  175. -------------------------------------------------------------------------------
  176.  
  177.    *  Numbers
  178.         o  Integers
  179.         o  Ratios
  180.         o  Floating-Point Numbers
  181.         o  Complex Numbers
  182.    *  Characters
  183.         o  Standard Characters
  184.         o  Line Divisions
  185.         o  Non-standard Characters
  186.         o  Character Attributes
  187.         o  String Characters
  188.    *  Symbols
  189.    *  Lists and Conses
  190.    *  Arrays
  191.         o  Vectors
  192.         o  Strings
  193.         o  Bit-Vectors
  194.    *  Hash Tables
  195.    *  Readtables
  196.    *  Packages
  197.    *  Pathnames
  198.    *  Streams
  199.    *  Random-States
  200.    *  Structures
  201.    *  Functions
  202.    *  Unreadable Data Objects
  203.    *  Overlap, Inclusion, and Disjointness of Types
  204.  
  205.  
  206. 2.1. Numbers
  207.  
  208. Several kinds of numbers are defined in Common Lisp. They are divided into
  209. integers; ratios; floating-point numbers, with names provided for up to four
  210. different floating-point representations; and complex numbers.
  211.  
  212. [change_begin]
  213. X3J13 voted in March 1989 (REAL-NUMBER-TYPE)   to add the type real.
  214.  
  215. The number data type encompasses all kinds of numbers. For convenience, there
  216. are names for some subclasses of numbers as well. Integers and ratios are of
  217. type rational. Rational numbers and floating-point numbers are of type real.
  218. Real numbers and complex numbers are of type number.
  219.  
  220. Although the names of these types were chosen with the terminology of
  221. mathematics in mind, the correspondences are not always exact. Integers and
  222. ratios model the corresponding mathematical concepts directly. Numbers of type
  223. float may be used to approximate real numbers, both rational and irrational.
  224. The real type includes all Common Lisp numbers that represent mathematical real
  225. numbers, though there are mathematical real numbers (irrational numbers) that
  226. do not have an exact Common Lisp representation. Only real numbers may be
  227. ordered using the <, >, <=, and >= functions.
  228.  
  229. -------------------------------------------------------------------------------
  230. Compatibility note: The Fortran 77 standard defines the term real datum to mean
  231. ``a processor approximation to the value of a real number.'' In practice the
  232. Fortran basic real type is the floating-point data type that Common Lisp calls
  233. single-float. The Fortran double precision type is Common Lisp's double-float.
  234. The Pascal real data type is an ``implementation-defined subset of the real
  235. numbers.'' In practice this is usually a floating-point type, often what Common
  236. Lisp calls double-float.
  237.  
  238. A translation of an algorithm written in Fortran or Pascal that uses real data
  239. usually will use some appropriate precision of Common Lisp's float type. Some
  240. algorithms may gain accuracy or flexibility by using Common Lisp's rational or
  241. real type instead.
  242. -------------------------------------------------------------------------------
  243.  
  244. [change_end]
  245.  
  246. -------------------------------------------------------------------------------
  247.  
  248.    *  Integers
  249.    *  Ratios
  250.    *  Floating-Point Numbers
  251.    *  Complex Numbers
  252.  
  253.  
  254. 2.1.1. Integers
  255.  
  256. The integer data type is intended to represent mathematical integers. Unlike
  257. most programming languages, Common Lisp in principle imposes no limit on the
  258. magnitude of an integer; storage is automatically allocated as necessary to
  259. represent large integers.
  260.  
  261. In every Common Lisp implementation there is a range of integers that are
  262. represented more efficiently than others; each such integer is called a fixnum,
  263. and an integer that is not a fixnum is called a bignum. Common Lisp is designed
  264. to hide this distinction as much as possible; the distinction between fixnums
  265. and bignums is visible to the user in only a few places where the efficiency of
  266. representation is important. Exactly which integers are fixnums is
  267. implementation-dependent; typically they will be those integers in the range
  268. to   , inclusive, for some n not less than 15. See most-positive-fixnum and
  269. most-negative-fixnum.
  270.  
  271. [change_begin]
  272. X3J13 voted in January 1989 (FIXNUM-NON-PORTABLE)   to specify that fixnum must
  273. be a supertype of the type (signed-byte 16), and additionally that the value of
  274. array-dimension-limit must be a fixnum (implying that the implementor should
  275. choose the range of fixnums to be large enough to accommodate the largest size
  276. of array to be supported).
  277.  
  278. -------------------------------------------------------------------------------
  279. Rationale: This specification allows programmers to declare variables in
  280. portable code to be of type fixnum for efficiency. Fixnums are guaranteed to
  281. encompass at least the set of 16-bit signed integers (compare this to the data
  282. type short int in the C programming language). In addition, any valid array
  283. index must be a fixnum, and therefore variables used to hold array indices
  284. (such as a dotimes variable) may be declared fixnum in portable code.
  285. -------------------------------------------------------------------------------
  286.  
  287. [change_end]
  288.  
  289. Integers are ordinarily written in decimal notation, as a sequence of decimal
  290. digits, optionally preceded by a sign and optionally followed by a decimal
  291. point. For example:
  292.  
  293.                           0  ;Zero
  294.                          -0  ;This always means the same as 0
  295.                          +6  ;The first perfect number
  296.                          28  ;The second perfect number
  297.                       1024.  ;Two to the tenth power
  298.                          -1  ;
  299. 15511210043330985984000000.  ;25 factorial (25!), probably a bignum
  300.  
  301. -------------------------------------------------------------------------------
  302. Compatibility note: MacLisp and Lisp Machine Lisp normally assume that integers
  303. are written in octal (radix-8) notation unless a decimal point is present.
  304. Interlisp assumes integers are written in decimal notation and uses a trailing
  305. Q to indicate octal radix; however, a decimal point, even in trailing position,
  306. always indicates a floating-point number. This is of course consistent with
  307. Fortran. Ada does not permit trailing decimal points but instead requires them
  308. to be embedded. In Common Lisp, integers written as described above are always
  309. construed to be in decimal notation, whether or not the decimal point is
  310. present; allowing the decimal point to be present permits compatibility with
  311. MacLisp.
  312. -------------------------------------------------------------------------------
  313.  
  314. Integers may be notated in radices other than ten. The notation
  315.  
  316. #nnrddddd     or     #nnRddddd
  317.  
  318. means the integer in radix-nn notation denoted by the digits ddddd. More
  319. precisely, one may write #, a non-empty sequence of decimal digits representing
  320. an unsigned decimal integer n, r (or R), an optional sign, and a sequence of
  321. radix-n digits, to indicate an integer written in radix n (which must be
  322. between 2 and 36, inclusive). Only legal digits for the specified radix may be
  323. used; for example, an octal number may contain only the digits 0 through 7. For
  324. digits above 9, letters of the alphabet of either case may be used in order.
  325. Binary, octal, and hexadecimal radices are useful enough to warrant the special
  326. abbreviations #b for #2r, #o for #8r, and #x for #16r. For example:
  327.  
  328. #2r11010101     ;Another way of writing 213 decimal
  329.  #b11010101     ;Ditto
  330. #b+11010101     ;Ditto
  331.       #o325     ;Ditto, in octal radix
  332.        #xD5     ;Ditto, in hexadecimal radix
  333.     #16r+D5     ;Ditto
  334.      #o-300     ;Decimal -192, written in base 8
  335.   #3r-21010     ;Same thing in base 3
  336.     #25R-7H     ;Same thing in base 25
  337.   #xACCEDED     ;181202413, in hexadecimal radix
  338.  
  339.  
  340. 2.1.2. Ratios
  341.  
  342. A ratio is a number representing the mathematical ratio of two integers.
  343. Integers and ratios collectively constitute the type rational. The canonical
  344. representation of a rational number is as an integer if its value is integral,
  345. and otherwise as the ratio of two integers, the numerator and denominator,
  346. whose greatest common divisor is 1, and of which the denominator is positive
  347. (and in fact greater than 1, or else the value would be integral). A ratio is
  348. notated with / as a separator, thus: 3/5. It is possible to notate ratios in
  349. non-canonical (unreduced) forms, such as 4/6, but the Lisp function prin1
  350. always prints the canonical form for a ratio.
  351.  
  352. If any computation produces a result that is a ratio of two integers such that
  353. the denominator evenly divides the numerator, then the result is immediately
  354. converted to the equivalent integer. This is called the rule of rational
  355. canonicalization.
  356.  
  357. Rational numbers may be written as the possibly signed quotient of decimal
  358. numerals: an optional sign followed by two non-empty sequences of digits
  359. separated by a /. This syntax may be described as follows:
  360.  
  361.  ratio ::= [sign] {digit}+ / {digit}+
  362.  
  363. The second sequence may not consist entirely of zeros. For example:
  364.  
  365. 2/3                 ;This is in canonical form
  366. 4/6                 ;A non-canonical form for the same number
  367. -17/23              ;A not very interesting ratio
  368. -30517578125/32768  ;This is
  369. 10/5                ;The canonical form for this is 2
  370.  
  371. To notate rational numbers in radices other than ten, one uses the same radix
  372. specifiers (one of #nnR, #O, #B, or #X) as for integers. For example:
  373.  
  374. #o-101/75         ;Octal notation for -65/61
  375. #3r120/21         ;Ternary notation for 15/7
  376. #Xbc/ad           ;Hexadecimal notation for 188/173
  377. #xFADED/FACADE    ;Hexadecimal notation for 1027565/16435934
  378.  
  379.  
  380. 2.1.3. Floating-Point Numbers
  381.  
  382. Common Lisp allows an implementation to provide one or more kinds of
  383. floating-point number, which collectively make up the type float. Now a
  384. floating-point number is a (mathematical) rational number of the form   , where
  385. s is +1 or -1, the sign; b is an integer greater than 1, the base or radix of
  386. the representation; p is a positive integer, the precision (in base-b digits)
  387. of the floating-point number; f is a positive integer between    and
  388. (inclusive), the significand; and e is an integer, the exponent. The value of p
  389. and the range of e depends on the implementation and on the type of
  390. floating-point number within that implementation. In addition, there is a
  391. floating-point zero; depending on the implementation, there may also be a
  392. ``minus zero.'' If there is no minus zero, then 0.0 and -0.0 are both
  393. interpreted as simply a floating-point zero.
  394.  
  395. -------------------------------------------------------------------------------
  396. Implementation note: The form of the above description should not be construed
  397. to require the internal representation to be in sign-magnitude form.
  398. Two's-complement and other representations are also acceptable. Note that the
  399. radix of the internal representation may be other than 2, as on the IBM 360 and
  400. 370, which use radix 16; see float-radix.
  401. -------------------------------------------------------------------------------
  402.  
  403. Floating-point numbers may be provided in a variety of precisions and sizes,
  404. depending on the implementation. High-quality floating-point software tends to
  405. depend critically on the precise nature of the floating-point arithmetic and so
  406. may not always be completely portable. As an aid in writing programs that are
  407. moderately portable, however, certain definitions are made here:
  408.  
  409.    *  A short floating-point number (type short-float) is of the representation
  410.      of smallest fixed precision provided by an implementation.
  411.  
  412.    *  A long floating-point number (type long-float) is of the representation
  413.      of the largest fixed precision provided by an implementation.
  414.  
  415.    *  Intermediate between short and long formats are two others, arbitrarily
  416.      called single and double (types single-float and double-float).
  417.  
  418. The precise definition of these categories is implementation-dependent.
  419. However, the rough intent is that short floating-point numbers be precise to at
  420. least four decimal places (but also have a space-efficient representation);
  421. single floating-point numbers, to at least seven decimal places; and double
  422. floating-point numbers, to at least fourteen decimal places. It is suggested
  423. that the precision (measured in bits, computed as   ) and the exponent size
  424. (also measured in bits, computed as the base-2 logarithm of 1 plus the maximum
  425. exponent value) be at least as great as the values in table 2-1.
  426.  
  427.  
  428.  
  429. Floating-point numbers are written in either decimal fraction or computerized
  430. scientific notation: an optional sign, then a non-empty sequence of digits with
  431. an embedded decimal point, then an optional decimal exponent specification. If
  432. there is no exponent specifier, then the decimal point is required, and there
  433. must be digits after it. The exponent specifier consists of an exponent marker,
  434. an optional sign, and a non-empty sequence of digits. For preciseness, here is
  435. a modified-BNF description of floating-point notation.
  436.  
  437. floating-point-number ::= [sign] {digit}* decimal-point {digit}* [exponent]
  438.                         | [sign] {digit}+ [decimal-point {digit}*] exponent
  439. sign ::= + | -
  440. decimal-point ::= .
  441. digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
  442. exponent ::= exponent-marker [sign] {digit}+
  443. exponent-marker ::= e | s | f | d | l | E | S | F | D | L
  444.  
  445. If no exponent specifier is present, or if the exponent marker e (or E) is
  446. used, then the precise format to be used is not specified. When such a
  447. representation is read and converted to an internal floating-point data object,
  448. the format specified by the variable *read-default-float-format* is used; the
  449. initial value of this variable is single-float.
  450.  
  451. The letters s, f, d, and l (or their respective uppercase equivalents)
  452. explicitly specify the use of short, single, double, and long format,
  453. respectively.
  454.  
  455. Examples of floating-point numbers:
  456.  
  457. 0.0                         ;Floating-point zero in default format
  458. 0E0                         ;Also floating-point zero in default format
  459. -.0                         ;This may be a zero or a minus zero,
  460.                             ; depending on the implementation
  461. 0.                          ;The integer zero, not a floating-point zero!
  462. 0.0s0                       ;A floating-point zero in short format
  463. 0s0                         ;Also a floating-point zero in short format
  464. 3.1415926535897932384d0     ;A double-format approximation to
  465. 6.02E+23                    ;Avogadro's number, in default format
  466. 602E+21                     ;Also Avogadro's number, in default format
  467. 3.010299957f-1              ;  , in single format
  468. -0.000000001s9              ;   in short format, the hard way
  469.  
  470. [change_begin]
  471. Notice of correction. The first edition unfortunately listed an incorrect value
  472. (3.1010299957f-1) for the base-10 logarithm of 2.
  473. [change_end]
  474.  
  475. The internal format used for an external representation depends only on the
  476. exponent marker and not on the number of decimal digits in the external
  477. representation.
  478.  
  479. While Common Lisp provides terminology and notation sufficient to accommodate
  480. four distinct floating-point formats, not all implementations will have the
  481. means to support that many distinct formats. An implementation is therefore
  482. permitted to provide fewer than four distinct internal floating-point formats,
  483. in which case at least one of them will be ``shared'' by more than one of the
  484. external format names short, single, double, and long according to the
  485. following rules:
  486.  
  487.    *  If one internal format is provided, then it is considered to be single,
  488.      but serves also as short, double, and long. The data types short-float,
  489.      single-float, double-float, and long-float are considered to be identical.
  490.      An expression such as (eql 1.0s0 1.0d0) will be true in such an
  491.      implementation because the two numbers 1.0s0 and 1.0d0 will be converted
  492.      into the same internal format and therefore be considered to have the same
  493.      data type, despite the differing external syntax. Similarly, (typep 1.0L0
  494.      'short-float) will be true in such an implementation. For output purposes
  495.      all floating-point numbers are assumed to be of single format and thus
  496.      will print using the exponent letter E or F.
  497.  
  498.    *  If two internal formats are provided, then either of two correspondences
  499.      may be used, depending on which is the more appropriate:
  500.  
  501.         o  One format is short; the other is single and serves also as double
  502.           and long. The data types single-float, double-float, and long-float
  503.           are considered to be identical, but short-float is distinct. An
  504.           expression such as (eql 1.0s0 1.0d0) will be false, but (eql 1.0f0
  505.           1.0d0) will be true. Similarly, (typep 1.0L0 'short-float) will be
  506.           false, but (typep 1.0L0 'single-float) will be true. For output
  507.           purposes all floating-point numbers are assumed to be of short or
  508.           single format.
  509.  
  510.         o  One format is single and serves also as short; the other is double
  511.           and serves also as long. The data types short-float and single-float
  512.           are considered to be identical, and the data types double-float and
  513.           long-float are considered to be identical. An expression such as (eql
  514.           1.0s0 1.0d0) will be false, as will (eql 1.0f0 1.0d0); but (eql 1.0d0
  515.           1.0L0) will be true. Similarly, (typep 1.0L0 'short-float) will be
  516.           false, but (typep 1.0L0 'double-float) will be true. For output
  517.           purposes all floating-point numbers are assumed to be of single or
  518.           double format.
  519.  
  520.    *  If three internal formats are provided, then either of two
  521.      correspondences may be used, depending on which is the more appropriate:
  522.  
  523.         o  One format is short; another format is single; and the third format
  524.           is double and serves also as long. Similar constraints apply.
  525.  
  526.         o  One format is single and serves also as short; another is double;
  527.           and the third format is long.
  528.  
  529. -------------------------------------------------------------------------------
  530. Implementation note: It is recommended that an implementation provide as many
  531. distinct floating-point formats as feasible, using table 2-1 as a guideline.
  532. Ideally, short-format floating-point numbers should have an ``immediate''
  533. representation that does not require heap allocation; single-format
  534. floating-point numbers should approximate IEEE proposed standard single-format
  535. floating-point numbers; and double-format floating-point numbers should
  536. approximate IEEE proposed standard double-format floating-point numbers
  537. [23,17,16].
  538. -------------------------------------------------------------------------------
  539.  
  540.  
  541. 2.1.4. Complex Numbers
  542.  
  543. Complex numbers (type complex) are represented in Cartesian form, with a real
  544. part and an imaginary part, each of which is a non-complex number (integer,
  545. ratio, or floating-point number). It should be emphasized that the parts of a
  546. complex number are not necessarily floating-point numbers; in this, Common Lisp
  547. is like PL/I and differs from Fortran. However, both parts must be of the same
  548. type: either both are rational, or both are of the same floating-point format.
  549.  
  550. Complex numbers may be notated by writing the characters #C followed by a list
  551. of the real and imaginary parts. If the two parts as notated are not of the
  552. same type, then they are converted according to the rules of floating-point
  553. contagion as described in chapter 12. (Indeed, #C(a b) is equivalent to
  554. #,(complex a b); see the description of the function complex.) For example:
  555.  
  556. #C(3.0s1 2.0s-1)     ;Real and imaginary parts are short format
  557. #C(5 -3)             ;A Gaussian integer
  558. #C(5/3 7.0)          ;Will be converted internally to #C(1.66666 7.0)
  559. #C(0 1)              ;The imaginary unit, that is, i
  560.  
  561. The type of a specific complex number is indicated by a list of the word
  562. complex and the type of the components; for example, a specialized
  563. representation for complex numbers with short floating-point parts would be of
  564. type (complex short-float). The type complex encompasses all complex
  565. representations.
  566.  
  567. A complex number of type (complex rational), that is, one whose components are
  568. rational, can never have a zero imaginary part. If the result of a computation
  569. would be a complex rational with a zero imaginary part, the result is
  570. immediately converted to a non-complex rational number by taking the real part.
  571. This is called the rule of complex canonicalization. This rule does not apply
  572. to floating-point complex numbers; #C(5.0 0.0) and 5.0 are different.
  573.  
  574.  
  575. 2.2. Characters
  576.  
  577. Characters are represented as data objects of type character.
  578.  
  579. [old_change_begin]
  580. There are two subtypes of interest, called standard-char and string-char.
  581. [old_change_end]
  582.  
  583. [change_begin]
  584. X3J13 voted in March 1989 (CHARACTER-PROPOSAL)   to remove the type
  585. string-char.
  586. [change_end]
  587.  
  588. A character object can be notated by writing #\ followed by the character
  589. itself. For example, #\g means the character object for a lowercase g. This
  590. works well enough for printing characters. Non-printing characters have names,
  591. and can be notated by writing #\ and then the name; for example, #\Space (or
  592. #\SPACE or #\space or #\sPaCE) means the space character. The syntax for
  593. character names after #\ is the same as that for symbols. However, only
  594. character names that are known to the particular implementation may be used.
  595.  
  596. -------------------------------------------------------------------------------
  597.  
  598.    *  Standard Characters
  599.    *  Line Divisions
  600.    *  Non-standard Characters
  601.    *  Character Attributes
  602.    *  String Characters
  603.  
  604. -------------------------------------------------------------------------------
  605.  
  606.  
  607. 2.2.1. Standard Characters
  608.  
  609. Common Lisp defines a standard character set (subtype standard-char) for two
  610. purposes. Common Lisp programs that are written in the standard character set
  611. can be read by any Common Lisp implementation; and Common Lisp programs that
  612. use only standard characters as data objects are most likely to be portable.
  613. The Common Lisp character set consists of a space character #\Space, a newline
  614. character #\Newline, and the following ninety-four non-blank printing
  615. characters or their equivalents:
  616.  
  617. ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
  618. @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _
  619. ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
  620.  
  621. The Common Lisp standard character set is apparently equivalent to the
  622. ninety-five standard ASCII printing characters plus a newline character.
  623. Nevertheless, Common Lisp is designed to be relatively independent of the ASCII
  624. character encoding. For example, the collating sequence is not specified except
  625. to say that digits must be properly ordered, the uppercase letters must be
  626. properly ordered, and the lowercase letters must be properly ordered (see char<
  627. for a precise specification). Other character encodings, particularly EBCDIC,
  628. should be easily accommodated (with a suitable mapping of printing characters).
  629.  
  630. Of the ninety-four non-blank printing characters, the following are used in
  631. only limited ways in the syntax of Common Lisp programs:
  632.  
  633. [  ]  {  }  ?  !  ^  _  ~  $  %
  634.  
  635. [old_change_begin]
  636. All of these characters except ! and _ are used within format strings as
  637. formatting directives. Except for this, [, ], {, }, ?, and ! are not used in
  638. Common Lisp and are reserved to the user for syntactic extensions; ^ and _ are
  639. not yet used in Common Lisp but are part of the syntax of reserved tokens and
  640. are reserved to implementors; ~ is not yet used in Common Lisp and is reserved
  641. to implementors; and $ and % are normally regarded as alphabetic characters but
  642. are not used in the names of any standard Common Lisp functions, variables, or
  643. other entities.
  644. [old_change_end]
  645.  
  646. [change_begin]
  647. X3J13 voted in June 1989 (PRETTY-PRINT-INTERFACE)   to add a format directive
  648. ~_ (see chapter 27).
  649. [change_end]
  650.  
  651. The following characters are called semi-standard:
  652.  
  653. #\Backspace  #\Tab  #\Linefeed  #\Page  #\Return  #\Rubout
  654.  
  655. Not all implementations of Common Lisp need to support them; but those
  656. implementations that use the standard ASCII character set should support them,
  657. treating them as corresponding respectively to the ASCII characters BS (octal
  658. code 010), HT (011), LF (012), FF (014), CR (015), and DEL (177). These
  659. characters are not members of the subtype standard-char unless synonymous with
  660. one of the standard characters specified above. For example, in a given
  661. implementation it might be sensible for the implementor to define #\Linefeed or
  662. #\Return to be synonymous with #\Newline, or #\Tab to be synonymous with
  663. #\Space.
  664.  
  665.  
  666. 2.2.2. Line Divisions
  667.  
  668. The treatment of line divisions is one of the most difficult issues in
  669. designing portable software, simply because there is so little agreement among
  670. operating systems. Some use a single character to delimit lines; the
  671. recommended ASCII character for this purpose is the line feed character LF
  672. (also called the new line character, NL), but some systems use the carriage
  673. return character CR. Much more common is the two-character sequence CR followed
  674. by LF. Frequently line divisions have no representation as a character but are
  675. implicit in the structuring of a file into records, each record containing a
  676. line of text. A deck of punched cards has this structure, for example.
  677.  
  678. Common Lisp provides an abstract interface by requiring that there be a single
  679. character, #\Newline, that within the language serves as a line delimiter. (The
  680. language C has a similar requirement.) An implementation of Common Lisp must
  681. translate between this internal single-character representation and whatever
  682. external representation(s) may be used.
  683.  
  684. -------------------------------------------------------------------------------
  685. Implementation note: How the character called #\Newline is represented
  686. internally is not specified here, but it is strongly suggested that the ASCII
  687. LF character be used in Common Lisp implementations that use the ASCII
  688. character encoding. The ASCII CR character is a workable, but in most cases
  689. inferior, alternative.
  690. -------------------------------------------------------------------------------
  691.  
  692. [change_begin]
  693. When the first edition was written it was not yet clear that UNIX would become
  694. so widely accepted. The decision to represent the line delimiter as a single
  695. character has proved to be a good one.
  696. [change_end]
  697.  
  698. The requirement that a line division be represented as a single character has
  699. certain consequences. A character string written in the middle of a program in
  700. such a way as to span more than one line must contain exactly one character to
  701. represent each line division. Consider this code fragment:
  702.  
  703. (setq a-string "This string
  704. contains
  705. forty-two characters.")
  706.  
  707. Between g and c there must be exactly one character, #\Newline; a two-character
  708. sequence, such as #\Return and then #\Newline, is not acceptable, nor is the
  709. absence of a character. The same is true between s and f.
  710.  
  711. When the character #\Newline is written to an output file, the Common Lisp
  712. implementation must take the appropriate action to produce a line division.
  713. This might involve writing out a record or translating #\Newline to a CR/LF
  714. sequence.
  715.  
  716. -------------------------------------------------------------------------------
  717. Implementation note: If an implementation uses the ASCII character encoding,
  718. uses the CR/LF sequence externally to delimit lines, uses LF to represent
  719. #\Newline internally, and supports #\Return as a data object corresponding to
  720. the ASCII character CR, the question arises as to what action to take when the
  721. program writes out #\Return followed by #\Newline. It should first be noted
  722. that #\Return is not a standard Common Lisp character, and the action to be
  723. taken when #\Return is written out is therefore not defined by the Common Lisp
  724. language. A plausible approach is to buffer the #\Return character and suppress
  725. it if and only if the next character is #\Newline (the net effect is to
  726. generate a CR/LF sequence). Another plausible approach is simply to ignore the
  727. difficulty and declare that writing #\Return and then #\Newline results in the
  728. sequence CR/CR/LF in the output.
  729. -------------------------------------------------------------------------------
  730.  
  731.  
  732. 2.2.3. Non-standard Characters
  733.  
  734. Any implementation may provide additional characters, whether printing
  735. characters or named characters. Some plausible examples:
  736.  
  737. #\    #\    #\Break  #\Home-Up  #\Escape
  738.  
  739. The use of such characters may render Common Lisp programs non-portable.
  740.  
  741.  
  742. [old_change_begin]
  743.  
  744. 2.2.4. Character Attributes
  745.  
  746. Every object of type character has three attributes: code, bits, and font. The
  747. code attribute is intended to distinguish among the printed glyphs and
  748. formatting functions for characters; it is a numerical encoding of the
  749. character proper. The bits attribute allows extra flags to be associated with a
  750. character. The font attribute permits a specification of the style of the
  751. glyphs (such as italics). Each of these attributes may be understood to be a
  752. non-negative integer.
  753.  
  754. The font attribute may be notated in unsigned decimal notation between the #
  755. and the \. For example, #3\a means the letter a in font 3. This might mean the
  756. same thing as #\   if font 3 were used to represent Greek letters. Note that
  757. not all Common Lisp implementations provide for non-zero font attributes; see
  758. char-font-limit.
  759.  
  760. The bits attribute may be notated by preceding the name of the character by the
  761. names or initials of the bits, separated by hyphens. The character itself may
  762. be written instead of the name, preceded if necessary by \. For example:
  763.  
  764. #\Control-Meta-Return   #\Meta-Control-Q
  765. #\Hyper-Space           #\Meta-\a
  766. #\Control-A             #\Meta-Hyper-\:
  767. #\C-M-Return            #\Hyper-\
  768.  
  769. Note that not all Common Lisp implementations provide for non-zero bits
  770. attributes; see char-bits-limit.
  771. [old_change_end]
  772.  
  773. [change_begin]
  774. X3J13 voted in March 1989 (CHARACTER-PROPOSAL)   to replace the notion of bits
  775. and font attributes with that of implementation-defined attributes.
  776. [change_end]
  777.  
  778.  
  779. [old_change_begin]
  780.  
  781. 2.2.5. String Characters
  782.  
  783. Any character whose bits and font attributes are zero may be contained in
  784. strings. All such characters together constitute a subtype of the characters;
  785. this subtype is called string-char.
  786. [old_change_end]
  787.  
  788. [change_begin]
  789. X3J13 voted in March 1989 (CHARACTER-PROPOSAL)   to eliminate the type
  790. string-char. Two new subtypes of character are base-character, defined to be
  791. equivalent to the result of the function call
  792.  
  793. (upgraded-array-element-type 'standard-char)
  794.  
  795. and extended-character, defined to be equivalent to the type specifier
  796.  
  797. (and character (not base-character))
  798.  
  799. An implementation may support additional subtypes of character that may or may
  800. not be supertypes of base-character. In addition, an implementation may define
  801. base-character to be equivalent to character. The choice of any base characters
  802. that are not standard characters is implementation-defined. Only base
  803. characters can be elements of a base string. No upper bound is specified for
  804. the number of distinct characters of type base-character-that is
  805. implementation-dependent-but the lower bound is 96, the number of standard
  806. Common Lisp characters.
  807. [change_end]
  808.  
  809.  
  810. 2.3. Symbols
  811.  
  812. Symbols are Lisp data objects that serve several purposes and have several
  813. interesting characteristics. Every object of type symbol has a name, called its
  814. print name. Given a symbol, one can obtain its name in the form of a string.
  815. Conversely, given the name of a symbol as a string, one can obtain the symbol
  816. itself. (More precisely, symbols are organized into packages, and all the
  817. symbols in a package are uniquely identified by name. See chapter 11.)
  818.  
  819. Symbols have a component called the property list, or plist. By convention this
  820. is always a list whose even-numbered components (calling the first component
  821. zero) are symbols, here functioning as property names, and whose odd-numbered
  822. components are associated property values. Functions are provided for
  823. manipulating this property list; in effect, these allow a symbol to be treated
  824. as an extensible record structure.
  825.  
  826. Symbols are also used to represent certain kinds of variables in Lisp programs,
  827. and there are functions for dealing with the values associated with symbols in
  828. this role.
  829.  
  830. A symbol can be notated simply by writing its name. If its name is not empty,
  831. and if the name consists only of uppercase alphabetic, numeric, or certain
  832. pseudo-alphabetic special characters (but not delimiter characters such as
  833. parentheses or space), and if the name of the symbol cannot be mistaken for a
  834. number, then the symbol can be notated by the sequence of characters in its
  835. name. Any uppercase letters that appear in the (internal) name may be written
  836. in either case in the external notation (more on this below). For example:
  837.  
  838. FROBBOZ         ;The symbol whose name is FROBBOZ
  839. frobboz         ;Another way to notate the same symbol
  840. fRObBoz         ;Yet another way to notate it
  841. unwind-protect  ;A symbol with a - in its name
  842. +$              ;The symbol named +$
  843. 1+              ;The symbol named 1+
  844. +1              ;This is the integer 1, not a symbol
  845. pascal_style    ;This symbol has an underscore in its name
  846. b^2-4*a*c       ;This is a single symbol!
  847.                 ; It has several special characters in its name
  848. file.rel.43     ;This symbol has periods in its name
  849. /usr/games/zork ;This symbol has slashes in its name
  850.  
  851. In addition to letters and numbers, the following characters are normally
  852. considered to be alphabetic for the purposes of notating symbols:
  853.  
  854. +  -  *  /  @  $  %  ^  &  _  =  <  >  ~  .
  855.  
  856. Some of these characters have conventional purposes for naming things; for
  857. example, symbols that name special variables generally have names beginning and
  858. ending with *. The last character listed above, the period, is considered
  859. alphabetic provided that a token does not consist entirely of periods. A single
  860. period standing by itself is used in the notation of conses and dotted lists; a
  861. token consisting of two or more periods is syntactically illegal. (The period
  862. also serves as the decimal point in the notation of numbers.)
  863.  
  864. The following characters are also alphabetic by default but are explicitly
  865. reserved to the user for definition as reader macro characters (see section
  866. 22.1.3) or any other desired purpose and therefore should not be used routinely
  867. in names of symbols:
  868.  
  869. ?  !  [  ]  {  }
  870.  
  871. A symbol may have uppercase letters, lowercase letters, or both in its print
  872. name. However, the Lisp reader normally converts lowercase letters to the
  873. corresponding uppercase letters when reading symbols. The net effect is that
  874. most of the time case makes no difference when notating symbols. Case does make
  875. a difference internally and when printing a symbol. Internally the symbols that
  876. name all standard Common Lisp functions, variables, and keywords have uppercase
  877. names; their names appear in lowercase in this book for readability. Typing
  878. such names with lowercase letters works because the function read will convert
  879. lowercase letters to the equivalent uppercase letters.
  880.  
  881. [change_begin]
  882. X3J13 voted in June 1989 (READ-CASE-SENSITIVITY)   to introduce readtable-case,
  883. which controls whether read will alter the case of letters read as part of the
  884. name of a symbol.
  885. [change_end]
  886.  
  887. If a symbol cannot be simply notated by the characters of its name because the
  888. (internal) name contains special characters or lowercase letters, then there
  889. are two ``escape'' conventions for notating them. Writing a character before
  890. any character causes the character to be treated itself as an ordinary
  891. character for use in a symbol name; in particular, it suppresses internal
  892. conversion of lowercase letters to their uppercase equivalents. If any
  893. character in a notation is preceded by , then that notation can never be
  894. interpreted as a number. For example:
  895.  
  896. \(                     ;The symbol whose name is (
  897. \+1                    ;The symbol whose name is +1
  898. +\1                    ;Also the symbol whose name is +1
  899. \frobboz               ;The symbol whose name is fROBBOZ
  900. 3.14159265\s0          ;The symbol whose name is 3.14159265s0
  901. 3.14159265\S0          ;A different symbol, whose name is 3.14159265S0
  902. 3.14159265s0           ;A short-format floating-point approximation to
  903. APL\\360               ;The symbol whose name is APL 360
  904. apl\\360               ;Also the symbol whose name is APL 360
  905. \(b^2\)\ -\ 4*a*c      ;The name is (B^2) - 4*A*C;
  906.                        ; it has parentheses and two spaces in it
  907. \(\b^2\)\ -\ 4*\a*\c   ;The name is (b^2) - 4*a*c;
  908.                        ; the letters are explicitly lowercase
  909.  
  910. It may be tedious to insert a \ before every delimiter character in the name of
  911. a symbol if there are many of them. An alternative convention is to surround
  912. the name of a symbol with vertical bars; these cause every character between
  913. them to be taken as part of the symbol's name, as if \ had been written before
  914. each one, excepting only | itself and \, which must nevertheless be preceded by
  915. \. For example:
  916.  
  917. |"|                     ;The same as writing \"
  918. |(b^2) - 4*a*c|         ;The name is (b^2) - 4*a*c
  919. |frobboz|               ;The name is frobboz, not FROBBOZ
  920. |APL\360|               ;The name is APL360, because the \ quotes the 3
  921. |APL\\360|              ;The name is APL\360
  922. |apl\\360|              ;The name is apl\360
  923. |\|\||                  ;Same as \|\|: the name is ||
  924. |(B^2) - 4*A*C|         ;The name is (B^2) - 4*A*C;
  925.                         ; it has parentheses and two spaces in it
  926. |(b^2) - 4*a*c|         ;The name is (b^2) - 4*a*c
  927.  
  928.  
  929. 2.4. Lists and Conses
  930.  
  931. A cons is a record structure containing two components called the car and the
  932. cdr. Conses are used primarily to represent lists.
  933.  
  934. A list is recursively defined to be either the empty list or a cons whose cdr
  935. component is a list. A list is therefore a chain of conses linked by their cdr
  936. components and terminated by nil, the empty list. The car components of the
  937. conses are called the elements of the list. For each element of the list there
  938. is a cons. The empty list has no elements at all.
  939.  
  940. A list is notated by writing the elements of the list in order, separated by
  941. blank space (space, tab, or return characters) and surrounded by parentheses.
  942.  
  943. (a b c)               ;A list of three symbols
  944. (2.0s0 (a 1) #\*)     ;A list of three things: a short floating-point
  945.                       ; number, another list, and a character object
  946.  
  947. The empty list nil therefore can be written as (), because it is a list with no
  948. elements.
  949.  
  950. A dotted list is one whose last cons does not have nil for its cdr, rather some
  951. other data object (which is also not a cons, or the first-mentioned cons would
  952. not be the last cons of the list). Such a list is called ``dotted'' because of
  953. the special notation used for it: the elements of the list are written between
  954. parentheses as before, but after the last element and before the right
  955. parenthesis are written a dot (surrounded by blank space) and then the cdr of
  956. the last cons. As a special case, a single cons is notated by writing the car
  957. and the cdr between parentheses and separated by a space-surrounded dot. For
  958. example:
  959.  
  960. (a . 4)         ;A cons whose car is a symbol
  961.                 ; and whose cdr is an integer
  962. (a b c . d)     ;A dotted list with three elements whose last cons
  963.                 ; has the symbol d in its cdr
  964.  
  965. -------------------------------------------------------------------------------
  966. Compatibility note: In MacLisp, the dot in dotted-list notation need not be
  967. surrounded by white space or other delimiters. The dot is required to be
  968. delimited in Common Lisp, as in Lisp Machine Lisp.
  969. -------------------------------------------------------------------------------
  970.  
  971. It is legitimate to write something like (a b . (c d)); this means the same as
  972. (a b c d). The standard Lisp output routines will never print a list in the
  973. first form, however; they will avoid dot notation wherever possible.
  974.  
  975. Often the term list is used to refer either to true lists or to dotted lists.
  976. When the distinction is important, the term ``true list'' will be used to refer
  977. to a list terminated by nil. Most functions advertised to operate on lists
  978. expect to be given true lists. Throughout this book, unless otherwise
  979. specified, it is an error to pass a dotted list to a function that is specified
  980. to require a list as an argument.
  981.  
  982. -------------------------------------------------------------------------------
  983. Implementation note: Implementors are encouraged to use the equivalent of the
  984. predicate endp wherever it is necessary to test for the end of a list. Whenever
  985. feasible, this test should explicitly signal an error if a list is found to be
  986. terminated by a non-nil atom. However, such an explicit error signal is not
  987. required, because some such tests occur in important loops where efficiency is
  988. important. In such cases, the predicate atom may be used to test for the end of
  989. the list, quietly treating any non-nil list-terminating atom as if it were nil.
  990. -------------------------------------------------------------------------------
  991.  
  992. Sometimes the term tree is used to refer to some cons and all the other conses
  993. transitively accessible to it through car and cdr links until non-conses are
  994. reached; these non-conses are called the leaves of the tree.
  995.  
  996. Lists, dotted lists, and trees are not mutually exclusive data types; they are
  997. simply useful points of view about structures of conses. There are yet other
  998. terms, such as association list. None of these are true Lisp data types. Conses
  999. are a data type, and nil is the sole object of type null. The Lisp data type
  1000. list is taken to mean the union of the cons and null data types, and therefore
  1001. encompasses both true lists and dotted lists.
  1002.  
  1003.  
  1004. 2.5. Arrays
  1005.  
  1006. An array is an object with components arranged according to a Cartesian
  1007. coordinate system. In general, these components may be any Lisp data objects.
  1008.  
  1009. The number of dimensions of an array is called its rank (this terminology is
  1010. borrowed from APL); the rank is a non-negative integer. Likewise, each
  1011. dimension is itself a non-negative integer. The total number of elements in the
  1012. array is the product of all the dimensions.
  1013.  
  1014. An implementation of Common Lisp may impose a limit on the rank of an array,
  1015. but this limit may not be smaller than 7. Therefore, any Common Lisp program
  1016. may assume the use of arrays of rank 7 or less. (A program may determine the
  1017. actual limit on array ranks for a given implementation by examining the
  1018. constant array-rank-limit.)
  1019.  
  1020. It is permissible for a dimension to be zero. In this case, the array has no
  1021. elements, and any attempt to access an element is in error. However, other
  1022. properties of the array, such as the dimensions themselves, may be used. If the
  1023. rank is zero, then there are no dimensions, and the product of the dimensions
  1024. is then by definition 1. A zero-rank array therefore has a single element.
  1025.  
  1026. An array element is specified by a sequence of indices. The length of the
  1027. sequence must equal the rank of the array. Each index must be a non-negative
  1028. integer strictly less than the corresponding array dimension. Array indexing is
  1029. therefore zero-origin, not one-origin as in (the default case of) Fortran.
  1030.  
  1031. As an example, suppose that the variable foo names a 3-by-5 array. Then the
  1032. first index may be 0, 1, or 2, and the second index may be 0, 1, 2, 3, or 4.
  1033. One may refer to array elements using the function aref; for example, (aref foo
  1034. 2 1) refers to element (2, 1) of the array. Note that aref takes a variable
  1035. number of arguments: an array, and as many indices as the array has dimensions.
  1036. A zero-rank array has no dimensions, and therefore aref would take such an
  1037. array and no indices, and return the sole element of the array.
  1038.  
  1039. In general, arrays can be multidimensional, can share their contents with other
  1040. array objects, and can have their size altered dynamically (either enlarging or
  1041. shrinking) after creation. A one-dimensional array may also have a fill
  1042. pointer.
  1043.  
  1044. Multidimensional arrays store their components in row-major order; that is,
  1045. internally a multidimensional array is stored as a one-dimensional array, with
  1046. the multidimensional index sets ordered lexicographically, last index varying
  1047. fastest. This is important in two situations: (1) when arrays with different
  1048. dimensions share their contents, and (2) when accessing very large arrays in a
  1049. virtual-memory implementation. (The first situation is a matter of semantics;
  1050. the second, a matter of efficiency.)
  1051.  
  1052. An array that is not displaced to another array, has no fill pointer, and is
  1053. not to have its size adjusted dynamically after creation is called a simple
  1054. array. The user may provide declarations that certain arrays will be simple.
  1055. Some implementations can handle simple arrays in an especially efficient
  1056. manner; for example, simple arrays may have a more compact representation than
  1057. non-simple arrays.
  1058.  
  1059. [change_begin]
  1060. X3J13 voted in June 1989 (ADJUST-ARRAY-NOT-ADJUSTABLE)   to clarify that if one
  1061. or more of the :adjustable, :fill-pointer, and :displaced-to arguments is true
  1062. when make-array is called, then whether the resulting array is simple is
  1063. unspecified; but if all three arguments are false, then the resulting array is
  1064. guaranteed to be simple.
  1065. [change_end]
  1066. -------------------------------------------------------------------------------
  1067.  
  1068.    *  Vectors
  1069.    *  Strings
  1070.    *  Bit-Vectors
  1071.  
  1072.  
  1073. 2.5.1. Vectors
  1074.  
  1075. One-dimensional arrays are called vectors in Common Lisp and constitute the
  1076. type vector (which is therefore a subtype of array). Vectors and lists are
  1077. collectively considered to be sequences. They differ in that any component of a
  1078. one-dimensional array can be accessed in constant time, whereas the average
  1079. component access time for a list is linear in the length of the list; on the
  1080. other hand, adding a new element to the front of a list takes constant time,
  1081. whereas the same operation on an array takes time linear in the length of the
  1082. array.
  1083.  
  1084. A general vector (a one-dimensional array that can have any data object as an
  1085. element but that has no additional paraphernalia) can be notated by notating
  1086. the components in order, separated by whitespace and surrounded by #( and ).
  1087. For example:
  1088.  
  1089. #(a b c)                    ;A vector of length 3
  1090. #()                         ;An empty vector
  1091. #(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47)
  1092.                             ;A vector containing the primes below 50
  1093.  
  1094. Note that when the function read parses this syntax, it always constructs a
  1095. simple general vector.
  1096.  
  1097. -------------------------------------------------------------------------------
  1098. Rationale: Many people have suggested that brackets be used to notate vectors,
  1099. as [a b c] instead of #(a b c). This notation would be shorter, perhaps more
  1100. readable, and certainly in accord with cultural conventions in other parts of
  1101. computer science and mathematics. However, to preserve the usefulness of the
  1102. user-definable macro-character feature of the function read, it is necessary to
  1103. leave some characters to the user for this purpose. Experience in MacLisp has
  1104. shown that users, especially implementors of languages for use in artificial
  1105. intelligence research, often want to define special kinds of brackets.
  1106. Therefore Common Lisp avoids using brackets and braces for any syntactic
  1107. purpose.
  1108. -------------------------------------------------------------------------------
  1109.  
  1110. Implementations may provide certain specialized representations of arrays for
  1111. efficiency in the case where all the components are of the same specialized
  1112. (typically numeric) type. All implementations provide specialized arrays for
  1113. the cases when the components are characters (or rather, a special subset of
  1114. the characters); the one-dimensional instances of this specialization are
  1115. called strings. All implementations are also required to provide specialized
  1116. arrays of bits, that is, arrays of type (array bit); the one-dimensional
  1117. instances of this specialization are called bit-vectors.
  1118.  
  1119.  
  1120. 2.5.2. Strings
  1121.  
  1122. [old_change_begin]
  1123. A string is simply a vector of characters. More precisely, a string is a
  1124. specialized vector whose elements are of type string-char.
  1125. [old_change_end]
  1126.  
  1127. [change_begin]
  1128. X3J13 voted in March 1989 (CHARACTER-PROPOSAL)   to eliminate the type
  1129. string-char and to redefine the type string to be the union of one or more
  1130. specialized vector types, the types of whose elements are subtypes of the type
  1131. character. Subtypes of string include simple-string, base-string, and
  1132. simple-base-string.
  1133.  
  1134. base-string == (vector base-character)
  1135. simple-base-string == (simple-array base-character (*))
  1136.  
  1137. An implementation may support other string subtypes as well. All Common Lisp
  1138. functions that operate on strings treat all strings uniformly; note, however,
  1139. that it is an error to attempt to insert an extended character into a base
  1140. string.
  1141. [change_end]
  1142.  
  1143. The type string is therefore a subtype of the type vector.
  1144.  
  1145. A string can be written as the sequence of characters contained in the string,
  1146. preceded and followed by a " (double quote) character. Any " or \ character in
  1147. the sequence must additionally have a \ character before it.
  1148.  
  1149. For example:
  1150.  
  1151. "Foo"                         ;A string with three characters in it
  1152. ""                            ;An empty string
  1153. "\"APL\\360?\" he cried."     ;A string with twenty characters
  1154. "|x| = |-x|"                  ;A ten-character string
  1155.  
  1156. Notice that any vertical bar | in a string need not be preceded by a \.
  1157. Similarly, any double quote in the name of a symbol written using vertical-bar
  1158. notation need not be preceded by a \. The double-quote and vertical-bar
  1159. notations are similar but distinct: double quotes indicate a character string
  1160. containing the sequence of characters, whereas vertical bars indicate a symbol
  1161. whose name is the contained sequence of characters.
  1162.  
  1163. The characters contained by the double quotes, taken from left to right, occupy
  1164. locations within the string with increasing indices. The leftmost character is
  1165. string element number 0, the next one is element number 1, the next one is
  1166. element number 2, and so on.
  1167.  
  1168. Note that the function prin1 will print any character vector (not just a simple
  1169. one) using this syntax, but the function read will always construct a simple
  1170. string when it reads this syntax.
  1171.  
  1172.  
  1173. 2.5.3. Bit-Vectors
  1174.  
  1175. A bit-vector can be written as the sequence of bits contained in the string,
  1176. preceded by #*; any delimiter character, such as whitespace, will terminate the
  1177. bit-vector syntax. For example:
  1178.  
  1179. #*10110     ;A five-bit bit-vector; bit 0 is a 1
  1180. #*          ;An empty bit-vector
  1181.  
  1182. The bits notated following the #*, taken from left to right, occupy locations
  1183. within the bit-vector with increasing indices. The leftmost notated bit is
  1184. bit-vector element number 0, the next one is element number 1, and so on.
  1185.  
  1186. The function prin1 will print any bit-vector (not just a simple one) using this
  1187. syntax, but the function read will always construct a simple bit-vector when it
  1188. reads this syntax.
  1189.  
  1190.  
  1191. 2.6. Hash Tables
  1192.  
  1193. Hash tables provide an efficient way of mapping any Lisp object (a key) to an
  1194. associated object. They are provided as primitives of Common Lisp because some
  1195. implementations may need to use internal storage management strategies that
  1196. would make it very difficult for the user to implement hash tables in a
  1197. portable fashion. Hash tables are described in chapter 16.
  1198.  
  1199.  
  1200. 2.7. Readtables
  1201.  
  1202. A readtable is a data structure that maps characters into syntax types for the
  1203. Lisp expression parser. In particular, a readtable indicates for each character
  1204. with syntax macro character what its macro definition is. This is a mechanism
  1205. by which the user may reprogram the parser to a limited but useful extent. See
  1206. section 22.1.5.
  1207.  
  1208.  
  1209. 2.8. Packages
  1210.  
  1211. Packages are collections of symbols that serve as name spaces. The parser
  1212. recognizes symbols by looking up character sequences in the current package.
  1213. Packages can be used to hide names internal to a module from other code.
  1214. Mechanisms are provided for exporting symbols from a given package to the
  1215. primary ``user'' package. See chapter 11.
  1216.  
  1217.  
  1218. 2.9. Pathnames
  1219.  
  1220. Pathnames are the means by which a Common Lisp program can interface to an
  1221. external file system in a reasonably implementation-independent manner. See
  1222. section 23.1.1.
  1223.  
  1224.  
  1225. 2.10. Streams
  1226.  
  1227. A stream is a source or sink of data, typically characters or bytes. Nearly all
  1228. functions that perform I/O do so with respect to a specified stream. The
  1229. function open takes a pathname and returns a stream connected to the file
  1230. specified by the pathname. There are a number of standard streams that are used
  1231. by default for various purposes. See chapter 21.
  1232.  
  1233. [change_begin]
  1234. X3J13 voted in January 1989 (STREAM-ACCESS)   to introduce subtypes of type
  1235. stream: broadcast-stream, concatenated-stream, echo-stream, synonym-stream,
  1236. string-stream, file-stream, and two-way-stream are disjoint subtypes of stream.
  1237. Note particularly that a synonym stream is always and only of type
  1238. synonym-stream, regardless of the type of the stream for which it is a synonym.
  1239.  
  1240. [change_end]
  1241.  
  1242.  
  1243. 2.11. Random-States
  1244.  
  1245. An object of type random-state is used to encapsulate state information used by
  1246. the pseudo-random number generator. For more information about random-state
  1247. objects, see section 12.9.
  1248.  
  1249.  
  1250. 2.12. Structures
  1251.  
  1252. Structures are instances of user-defined data types that have a fixed number of
  1253. named components. They are analogous to records in Pascal. Structures are
  1254. declared using the defstruct construct; defstruct automatically defines access
  1255. and constructor functions for the new data type.
  1256.  
  1257. Different structures may print out in different ways; the definition of a
  1258. structure type may specify a print procedure to use for objects of that type
  1259. (see the :print-function option to defstruct). The default notation for
  1260. structures is
  1261.  
  1262. #S(structure-name
  1263.         slot-name-1 slot-value-1
  1264.         slot-name-2 slot-value-2
  1265.                       ...)
  1266.  
  1267. where #S indicates structure syntax, structure-name is the name (a symbol) of
  1268. the structure type, each slot-name is the name (also a symbol) of a component,
  1269. and each corresponding slot-value is the representation of the Lisp object in
  1270. that slot.
  1271.  
  1272.  
  1273. 2.13. Functions
  1274.  
  1275. [old_change_begin]
  1276. A function is anything that may be correctly given to the funcall or apply
  1277. function, and is to be executed as code when arguments are supplied.
  1278.  
  1279. A compiled-function is a compiled code object.
  1280.  
  1281. A lambda-expression (a list whose car is the symbol lambda) may serve as a
  1282. function. Depending on the implementation, it may be possible for other lists
  1283. to serve as functions. For example, an implementation might choose to represent
  1284. a ``lexical closure'' as a list whose car contains some special marker.
  1285.  
  1286. A symbol may serve as a function; an attempt to invoke a symbol as a function
  1287. causes the contents of the symbol's function cell to be used. See
  1288. symbol-function and defun.
  1289.  
  1290. The result of evaluating a function special form will always be a function.
  1291. [old_change_end]
  1292.  
  1293. [change_begin]
  1294. X3J13 voted in June 1988 (FUNCTION-TYPE)   to revise these specifications. The
  1295. type function is to be disjoint from cons and symbol, and so a list whose car
  1296. is lambda is not, properly speaking, of type function, nor is any symbol.
  1297. However, standard Common Lisp functions that accept functional arguments will
  1298. accept a symbol or a list whose car is lambda and automatically coerce it to be
  1299. a function; such standard functions include funcall, apply, and mapcar. Such
  1300. functions do not, however, accept a lambda-expression as a functional argument;
  1301. therefore one may not write
  1302.  
  1303. (mapcar '(lambda (x y) (sqrt (* x y))) p q)
  1304.  
  1305. but instead one must write something like
  1306.  
  1307. (mapcar #'(lambda (x y) (sqrt (* x y))) p q)
  1308.  
  1309. This change makes it impermissible to represent a lexical closure as a list
  1310. whose car is some special marker.
  1311.  
  1312. The value of a function special form will always be of type function.
  1313. [change_end]
  1314.  
  1315.  
  1316. 2.14. Unreadable Data Objects
  1317.  
  1318. Some objects may print in implementation-dependent ways. Such objects cannot
  1319. necessarily be reliably reconstructed from a printed representation, and so
  1320. they are usually printed in a format informative to the user but not acceptable
  1321. to the read function: #<useful information>. The Lisp reader will signal an
  1322. error on encountering #<.
  1323.  
  1324. As a hypothetical example, an implementation might print
  1325.  
  1326. #<stack-pointer si:rename-within-new-definition-maybe #o311037552>
  1327.  
  1328. for an implementation-specific ``internal stack pointer'' data type whose
  1329. printed representation includes the name of the type, some information about
  1330. the stack slot pointed to, and the machine address (in octal) of the stack
  1331. slot.
  1332.  
  1333. [change_begin]
  1334. See print-unreadable-object, a macro that prints an object using #< syntax.
  1335. [change_end]
  1336.  
  1337.  
  1338. 2.15. Overlap, Inclusion, and Disjointness of Types
  1339.  
  1340. The Common Lisp data type hierarchy is tangled and purposely left somewhat
  1341. open-ended so that implementors may experiment with new data types as
  1342. extensions to the language. This section explicitly states all the defined
  1343. relationships between types, including subtype/supertype relationships,
  1344. disjointness, and exhaustive partitioning. The user of Common Lisp should not
  1345. depend on any relationships not explicitly stated here. For example, it is not
  1346. valid to assume that because a number is not complex and not rational that it
  1347. must be a float, because implementations are permitted to provide yet other
  1348. kinds of numbers.
  1349.  
  1350. First we need some terminology. If x is a supertype of y, then any object of
  1351. type y is also of type x, and y is said to be a subtype of x. If types x and y
  1352. are disjoint, then no object (in any implementation) may be both of type x and
  1353. of type y. Types    through    are an exhaustive union of type x if each    is
  1354. a subtype of x, and any object of type x is necessarily of at least one of the
  1355. types   ;    through    are furthermore an exhaustive partition if they are
  1356. also pairwise disjoint.
  1357.  
  1358.    *  The type t is a supertype of every type whatsoever. Every object is of
  1359.      type t.
  1360.  
  1361.    *  The type nil is a subtype of every type whatsoever. No object is of type
  1362.      nil.
  1363.  
  1364. [old_change_begin]
  1365.  
  1366.    *  The types cons, symbol, array, number, and character are pairwise
  1367.      disjoint.
  1368.  
  1369. [old_change_end]
  1370.  
  1371. [change_begin]
  1372. X3J13 voted in June 1988 (DATA-TYPES-HIERARCHY-UNDERSPECIFIED)   to extend the
  1373. preceding paragraph as follows.
  1374.  
  1375.    *  The types cons, symbol, array, number, character, hash-table, readtable,
  1376.      package, pathname, stream, random-state, and any single other type created
  1377.      by defstruct or defclass are pairwise disjoint.
  1378.  
  1379. The wording of the first edition was intended to allow implementors to use the
  1380. defstruct facility to define the built-in types hash-table, readtable, package,
  1381. pathname, stream, random-state. The change still permits this implementation
  1382. strategy but forbids these built-in types from including, or being included in,
  1383. other types (in the sense of the defstruct :include option).
  1384.  
  1385. X3J13 voted in June 1988 (FUNCTION-TYPE)   to specify that the type function is
  1386. disjoint from the types cons, symbol, array, number, and character. The type
  1387. compiled-function is a subtype of function; implementations are free to define
  1388. other subtypes of function.
  1389. [change_end]
  1390.  
  1391. [old_change_begin]
  1392.  
  1393.    *  The types rational, float, and complex are pairwise disjoint subtypes of
  1394.      number.
  1395.  
  1396. [old_change_end]
  1397.  
  1398. [change_begin]
  1399. X3J13 voted in March 1989 (REAL-NUMBER-TYPE)   to rewrite the preceding item as
  1400. follows.
  1401.  
  1402.    *  The types real and complex are pairwise disjoint subtypes of number.
  1403.  
  1404. -------------------------------------------------------------------------------
  1405. Rationale: It might be thought that real and complex should form an exhaustive
  1406. partition of the type number. This is purposely avoided here in order to permit
  1407. compatible experimentation with extensions to the Common Lisp number system.
  1408. -------------------------------------------------------------------------------
  1409.  
  1410.    *  The types rational and float are pairwise disjoint subtypes of real.
  1411.  
  1412. -------------------------------------------------------------------------------
  1413. Rationale: It might be thought that rational and float should form an
  1414. exhaustive partition of the type real. This is purposely avoided here in order
  1415. to permit compatible experimentation with extensions to the Common Lisp number
  1416. system.
  1417. -------------------------------------------------------------------------------
  1418. [change_end]
  1419.  
  1420.    *  The types integer and ratio are disjoint subtypes of rational.
  1421.  
  1422. -------------------------------------------------------------------------------
  1423. Rationale: It might be thought that integer and ratio should form an exhaustive
  1424. partition of the type rational. This is purposely avoided here in order to
  1425. permit compatible experimentation with extensions to the Common Lisp rational
  1426. number system.
  1427. -------------------------------------------------------------------------------
  1428.  
  1429. [old_change_begin]
  1430.  
  1431.    *  The types fixnum and bignum are disjoint subtypes of integer.
  1432.  
  1433. -------------------------------------------------------------------------------
  1434. Rationale: It might be thought that fixnum and bignum should form an exhaustive
  1435. partition of the type integer. This is purposely avoided here in order to
  1436. permit compatible experimentation with extensions to the Common Lisp integer
  1437. number system, such as the idea of adding explicit representations of infinity
  1438. or of positive and negative infinity.
  1439. -------------------------------------------------------------------------------
  1440.  
  1441. [old_change_end]
  1442.  
  1443. [change_begin]
  1444. X3J13 voted in January 1989 (FIXNUM-NON-PORTABLE)   to specify that the types
  1445. fixnum and bignum do in fact form an exhaustive partition of the type integer;
  1446. more precisely, they voted to specify that the type bignum is by definition
  1447. equivalent to (and integer (not fixnum)). This is consistent with the first
  1448. edition text in section 2.1.1.
  1449.  
  1450. I interpret this to mean that implementators could still experiment with such
  1451. extensions as adding explicit representations of infinity, but such infinities
  1452. would necessarily be of type bignum.
  1453. [change_end]
  1454.  
  1455.    *  The types short-float, single-float, double-float, and long-float are
  1456.      subtypes of float. Any two of them must be either disjoint or identical;
  1457.      if identical, then any other types between them in the above ordering must
  1458.      also be identical to them (for example, if single-float and long-float are
  1459.      identical types, then double-float must be identical to them also).
  1460.  
  1461.    *  The type null is a subtype of symbol; the only object of type null is
  1462.      nil.
  1463.  
  1464.    *  The types cons and null form an exhaustive partition of the type list.
  1465.  
  1466. [old_change_begin]
  1467.  
  1468.    *  The type standard-char is a subtype of string-char; string-char is a
  1469.      subtype of character.
  1470.  
  1471. [old_change_end]
  1472.  
  1473. [change_begin]
  1474. X3J13 voted in March 1989 (CHARACTER-PROPOSAL)   to remove the type
  1475. string-char. The preceding item is replaced by the following.
  1476.  
  1477.    *  The type standard-char is a subtype of base-character. The types
  1478.      base-character and extended-character form an exhaustive partition of
  1479.      character.
  1480.  
  1481. [change_end]
  1482.  
  1483. [old_change_begin]
  1484.  
  1485.    *  The type string is a subtype of vector, for string means (vector
  1486.      string-char).
  1487.  
  1488. [old_change_end]
  1489.  
  1490. [change_begin]
  1491. X3J13 voted in March 1989 (CHARACTER-PROPOSAL)   to remove the type
  1492. string-char. The preceding item is replaced by the following.
  1493.  
  1494.    *  The type string is a subtype of vector; it is the union of all types
  1495.      (vector c) such that c is a subtype of character.
  1496.  
  1497. [change_end]
  1498.  
  1499.    *  The type bit-vector is a subtype of vector, for bit-vector means (vector
  1500.      bit).
  1501.  
  1502.    *  The types (vector t), string, and bit-vector are disjoint.
  1503.  
  1504.    *  The type vector is a subtype of array; for all types x, the type (vector
  1505.      x) is the same as the type (array x (*)).
  1506.  
  1507.    *  The type simple-array is a subtype of array.
  1508.  
  1509. [old_change_begin]
  1510.  
  1511.    *  The types simple-vector, simple-string, and simple-bit-vector are
  1512.      disjoint subtypes of simple-array, for they respectively mean
  1513.      (simple-array t (*)), (simple-array string-char (*)), and (simple-array
  1514.      bit (*)).
  1515.  
  1516. [old_change_end]
  1517.  
  1518. [change_begin]
  1519. X3J13 voted in March 1989 (CHARACTER-PROPOSAL)   to remove the type
  1520. string-char. The preceding item is replaced by the following.
  1521.  
  1522.    *  The types simple-vector, simple-string, and simple-bit-vector are
  1523.      disjoint subtypes of simple-array, for they mean (simple-array t (*)), the
  1524.      union of all types (simple-array c (*)) such that c is a subtype of
  1525.      character, and (simple-array bit (*)), respectively.
  1526.  
  1527. [change_end]
  1528.  
  1529.    *  The type simple-vector is a subtype of vector and indeed is a subtype of
  1530.      (vector t).
  1531.  
  1532.    *  The type simple-string is a subtype of string. (Note that although string
  1533.      is a subtype of vector, simple-string is not a subtype of simple-vector.)
  1534.  
  1535. -------------------------------------------------------------------------------
  1536. Rationale: The hypothetical name simple-general-vector would have been more
  1537. accurate than simple-vector, but in this instance euphony and user convenience
  1538. were deemed more important to the design of Common Lisp than a rigid symmetry.
  1539. -------------------------------------------------------------------------------
  1540.  
  1541.    *  The type simple-bit-vector is a subtype of bit-vector. (Note that
  1542.      although bit-vector is a subtype of vector, simple-bit-vector is not a
  1543.      subtype of simple-vector.)
  1544.  
  1545.    *  The types vector and list are disjoint subtypes of sequence.
  1546.  
  1547.    *  The types random-state, readtable, package, pathname, stream, and
  1548.      hash-table are pairwise disjoint.
  1549.  
  1550. [change_begin]
  1551. X3J13 voted in June 1988 (DATA-TYPES-HIERARCHY-UNDERSPECIFIED)   to make
  1552. random-state, readtable, package, pathname, stream, and hash-table pairwise
  1553. disjoint from a number of other types as well; see note above.
  1554.  
  1555. X3J13 voted in January 1989 (STREAM-ACCESS)   to introduce subtypes of type
  1556. stream.
  1557.  
  1558.    *  The types two-way-stream, echo-stream, broadcast-stream, file-stream,
  1559.      synonym-stream, string-stream, and concatenated-stream are disjoint
  1560.      subtypes of stream.
  1561.  
  1562. [change_end]
  1563.  
  1564.    *  Any two types created by defstruct are disjoint unless one is a supertype
  1565.      of the other by virtue of the :include option.
  1566.  
  1567. [old_change_begin]
  1568.  
  1569.    *  An exhaustive union for the type common is formed by the types cons,
  1570.      symbol, (array x) where x is either t or a subtype of common, string,
  1571.      fixnum, bignum, ratio, short-float, single-float, double-float,
  1572.      long-float, (complex x) where x is a subtype of common, standard-char,
  1573.      hash-table, readtable, package, pathname, stream, random-state, and all
  1574.      types created by the user via defstruct. An implementation may not
  1575.      unilaterally add subtypes to common; however, future revisions to the
  1576.      Common Lisp standard may extend the definition of the common data type.
  1577.      Note that a type such as number or array may or may not be a subtype of
  1578.      common, depending on whether or not the given implementation has extended
  1579.      the set of objects of that type.
  1580.  
  1581. [old_change_end]
  1582.  
  1583. [change_begin]
  1584. X3J13 voted in March 1989 (COMMON-TYPE)   to remove the type common from the
  1585. language.
  1586. [change_end]
  1587.  
  1588.  
  1589.